﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Proyecto_e.Models;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Net;
using System.Net.Mail;

namespace Proyecto_e.Controllers
{
    public class UsuariosController : Controller
    {
        proyecto_eEntities1 proyecto = new proyecto_eEntities1();
        ModeloUsuario m = new ModeloUsuario();
        ModeloEncuesta me = new ModeloEncuesta();
        string id;

        public ActionResult Inicio_Admin()
        {
            try
            {
                int loguearse = (int)Session["loguearse"];
                if (loguearse == 1)
                {
                    List<encuesta> y = m.listareBD();
                    return View(y);
                }
                else
                {
                    return RedirectToAction("Loguear");
                }
            }
            catch (Exception)
            {
                return RedirectToAction("Loguear");
            }
        }

        //
        // GET: /Usuarios/

        public ActionResult Index()
        {
            try
            {
                int loguearse = (int)Session["loguearse"];
                if (loguearse == 1)
                {
                    List<usuario> x = m.listarBD();
                    return View(x);
                }
                else
                {
                    return RedirectToAction("Loguear");
                }
            }
            catch (Exception)
            {
                return RedirectToAction("Loguear");
            }
        }

        [HttpPost]
        public ActionResult Iniciar(string login, string password)
        {
            bool bandera = false;
            if (login == "admin" && password == "123")
            {
                Session["loguearse"] = 1;
                return RedirectToAction("Inicio_Admin");
            }
            else
            {
                try
                {
                    id = m.get_id(login);
                    bandera = m.loguear(login, password);
                    if (bandera == true)
                    {
                        string Id;
                        Id = m.get_id(login);
                        Session["loguearse"] = Convert.ToInt32(id);
                        return RedirectToAction("Inicio_Usuario", new { id = Id });
                    }
                    else
                    {
                        System.Windows.Forms.MessageBox.Show("El usuario no se encuentra registrado!.");
                        return RedirectToAction("Loguear");
                    }
                }
                catch (Exception)
                {
                    System.Windows.Forms.MessageBox.Show("El usuario no se encuentra registrado!.");
                    return RedirectToAction("Loguear");
                }
            }
        }

        //
        // GET: /Usuarios/Details/5

        public ActionResult Details(int id)
        {
            try
            {
            int loguearse = (int)Session["loguearse"];
                if (loguearse == 1)
                {
                    m.delallarBD(id);
                    return View(m.delallarBD(id));
                }
                else
                {
                    return RedirectToAction("Loguear");
                }
            }
            catch (Exception)
            {
                return RedirectToAction("Loguear");
            }
        }

        //
        // GET: /Usuarios/Create

        public ActionResult Create()
        {
            try
            {
            int loguearse = (int)Session["loguearse"];
                if (loguearse == 1)
                {
                    return View();
                }
                else
                {
                    return RedirectToAction("Loguear");
                }
            }
            catch (Exception)
            {
                return RedirectToAction("Loguear");
            }
        } 

        //
        // POST: /Usuarios/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection, string usuario, string password, string nombres, string apellidos, string edad, string sexo, string email, string telefono)
        {
            if(usuario != "" && password != "" && nombres != "" && apellidos != "")
            {
                try
                {
                    int loguearse = (int)Session["loguearse"];
                    if (loguearse == 1)
                    {
                        try
                        {
                            bool verificacion = false;
                            verificacion = m.verificarusuario(usuario);
                            if (verificacion != true)
                            {
                                // TODO: Add insert logic here
                                m.insertarBD(usuario, password, nombres, apellidos, edad, sexo, email, telefono);
                                return RedirectToAction("Index");
                            }
                            else
                            {
                                return View();
                            }
                        }
                        catch
                        {
                            return View();
                        }
                    }
                    else
                    {
                        return RedirectToAction("Loguear");
                    }
                }
                catch (Exception)
                {
                    return RedirectToAction("Loguear");
                }
            }
            else
            {
                return RedirectToAction("Index");
            }
        }
        
        //
        // GET: /Usuarios/Edit/5
 
        public ActionResult Edit(int id)
        {
            try
            {
                int loguearse = (int)Session["loguearse"];
                if (loguearse == Convert.ToInt32(id))
                {
                    var usuariotoedit = (from m in proyecto.usuario where m.ID_USUARIO == loguearse select m).First();
                    return View(usuariotoedit);
                }
                else
                {
                    return RedirectToAction("Inicio_Usuario", new { id = (int)Session["loguearse"] });
                }
            }
            catch (Exception)
            {
                return RedirectToAction("Inicio_Usuario", new { id = (int)Session["loguearse"] });
            }
        }

        public ActionResult Edit_admin(int id)
        {
            try
            {
                int loguearse = (int)Session["loguearse"];
                if (loguearse == 1)
                {
                    var usuariotoedit = (from m in proyecto.usuario where m.ID_USUARIO == id select m).First();
                    return View(usuariotoedit);
                }
                else
                {
                    return RedirectToAction("Loguear");
                }
            }
            catch (Exception)
            {
                return RedirectToAction("Loguear");
            }
        }

        //
        // POST: /Usuarios/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection, usuario us)
        {
            try
            {
            int loguearse = (int)Session["loguearse"];
            if (loguearse == Convert.ToInt32(id))
                {
                    try
                    {
                        // TODO: Add update logic here
                        var peredit = (from m in proyecto.usuario where m.ID_USUARIO == us.ID_USUARIO select m).First();
                        if (!ModelState.IsValid)
                        {
                            return View(peredit);
                        }
                            proyecto.ApplyCurrentValues(peredit.EntityKey.EntitySetName, us);
                            proyecto.SaveChanges();
                            return RedirectToAction("Index");
                    }
                    catch
                    {
                        return View();
                    }
                }
                else
                {
                    return RedirectToAction("Loguear");
                }
            }
            catch (Exception)
            {
                return RedirectToAction("Loguear");
            }
        }

        //
        // GET: /Usuarios/Delete/5
 
        public ActionResult Delete(int id)
        {
            try
            {
            int loguearse = (int)Session["loguearse"];
                if (loguearse == 1)
                {
                    var pertodelete = proyecto.usuario.First(n => n.ID_USUARIO == id);
                    if (!ModelState.IsValid)
                    {
                        return View();
                    }
                    m.eliminarBD(id);
                    return RedirectToAction("Index");
                }
                else
                {
                    return RedirectToAction("Loguear");
                }
            }
            catch (Exception)
            {
                return RedirectToAction("Loguear");
            }
        }

        //
        // POST: /Usuarios/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {

                // TODO: Add delete logic here
                return View();
        }

        //Metodos Usuario

        public ActionResult Inicio_Usuario(int id)
        {
            try
            {
                int loguearse = (int)Session["loguearse"];
                if (loguearse == Convert.ToInt32(id))
                {
                    Session["ID"] = id;
                    return View(me.getEncuestasUsuario(id));
                }
                else
                {
                    return RedirectToAction("Loguear");
                }
            }
            catch (Exception)
            {
                return RedirectToAction("Loguear");
            }
        }

        //Metodos necesario para poder utilizar o llamar la vista con el mismo nombre.asxp
        //Metodos auxiliares

        public ActionResult Ayuda()
        {
            return View();
        }

        public ActionResult Contacto()
        {
            return View();
        }

        public ActionResult AyudaUsuario()
        {
            return View();
        }

        public ActionResult ContactoUsuario()
        {
            return View();
        }

        public ActionResult RecordarContrasena()
        {
            return View();
        }

        public ActionResult Loguear()
        {
            Session.Contents.RemoveAll();
            return View();
        }

        public ActionResult Registrarse()
        {
            return View();
        }

        public ActionResult Cancelar()
        {
            return RedirectToAction("Loguear");
        }

        [HttpPost, ValidateInput(false)]
        public ActionResult Aceptar(string usuario, string password, string nombres, string apellidos, string edad, string sexo, string email, string telefono)
        {
            if(usuario != "" && password != "" && nombres != "" && apellidos != "" && email!="")
            {
                    try
                    { 
                        bool verificacion = false;
                        verificacion = m.verificarusuario(usuario);
                        if (verificacion != true)
                        {
                            // TODO: Add insert logic here
                            m.insertarBD(usuario, password, nombres, apellidos, edad, sexo, email, telefono);
                            id = m.get_id(usuario);
                            string Id;
                            Id = m.get_id(usuario);
                            Session["loguearse"] = Convert.ToInt32(id);
                            System.Windows.Forms.MessageBox.Show("Registro satisfactorio!");
                            return RedirectToAction("Inicio_Usuario", new { id = Id });
                        }
                        else
                        {
                            System.Windows.Forms.MessageBox.Show("El Nombre de usuario ya existe!.");                   
                            return RedirectToAction("Registrarse");
                        }
                    }
                    catch(Exception)
                    {
                        System.Windows.Forms.MessageBox.Show("Surgió un error en el registro, vuelve a intentarlo!.");
                        return RedirectToAction("Registrarse");
                    }
            }
            else
             {
                return RedirectToAction("Loguear");
             }   
        }

        [HttpPost]
        public ActionResult Enviar(string email)
        {
            if (email != "")
            {
                MailMessage msg = new MailMessage();
                msg.To.Add(email);
                msg.From = new MailAddress(email, "Encuestas Online", System.Text.Encoding.UTF8);
                msg.Subject = "Recordatorio de contraseña, EncuestasOnline";
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
                msg.Body = "No contestes a este correo, La Contraseña de tu cuenta en EncuestasOnline es " + m.ObtenerContrasena(email);
                msg.BodyEncoding = System.Text.Encoding.UTF8;
                msg.IsBodyHtml = false;

                SmtpClient client = new SmtpClient();
                client.Credentials = new NetworkCredential("verificacionencuestas@gmail.com", "verificacion");
                client.Port = 587;
                client.Host = "smtp.gmail.com";
                client.EnableSsl = true;
                try
                {
                    client.Send(msg);
                    return RedirectToAction("Loguear");
                }
                catch (System.Net.Mail.SmtpException ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                }
                return RedirectToAction("Loguear");
            }
            else
            {
                return RedirectToAction("Loguear");
            }
        }
    }
}
